package com.pp.common.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("user")
public class User extends BasePojo {

    /**
     * 用户 ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;

    /**
     * 用户名
     */
    @TableField("username")
    private String username;

    /**
     * 密码
     */
    @JsonIgnore
    @TableField("password")
    private String password;

    /**
     * 加密盐值
     */
    @JsonIgnore
    @TableField("salt")
    private String salt;

    /**
     * 昵称
     */
    @TableField("nickname")
    private String nickname;

    /**
     * 性别
     */
    @TableField("gender")
    private Integer gender;

    /**
     * 年龄
     * 后期可以改成 birthday， age 可以计算出来
     */
    // TODO
    @TableField("age")
    private Integer age;

    /**
     * 电话号码
     */
    @TableField("phone")
    private String phone;

    /**
     * 邮箱
     */
    @TableField("email")
    private String email;

    /**
     * 头像路径
     */
    @TableField("avatar_path")
    private String avatarPath;

    /**
     * 个人简介
     */
    @Builder.Default
    @TableField("intro")
    private String intro = "这个人很懒，什么都没留下";

    /**
     * 发帖总数
     */
    @Builder.Default
    @TableField("post_num")
    private Integer postNum = 0;

    /**
     * 积分: 每发一个帖子，积分 + 1
     * 后期积分增加的规则可以自己定义
     */
    // TODO
    @Builder.Default
    @TableField("point")
    private Integer point = 0;

    /**
     * 关注其他用户数
     */
    @Builder.Default
    @TableField("following_num")
    private Integer followingNum = 0;

    /**
     * 自己粉丝数
     */
    @Builder.Default
    @TableField("follower_num")
    private Integer followerNum = 0;

    /**
     * 被举报数
     */
    @Builder.Default
    @TableField("user_report_num")
    private Integer userReportNum = 0;

    /**
     * 用户状态 0 - 注销 1 - 正常 2 - 审核 3 - 封禁
     */
    @Builder.Default
    @TableField("user_status")
    private Integer userStatus = 1;

    /**
     * 角色
     */
    @TableField(exist = false) // 该属性在当前类对应的表中不存在
    private Role role;

}
